import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class ThreadDemo32 {
//    public static int sum = 0;
    public static void main(String[] args) throws InterruptedException, ExecutionException {
//        Thread t1 = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                int result = 0;
//                for (int i = 0; i < 1000; i++) {
//                    result += i;
//                }
//                sum = result;
//            }
//        });
//        t1.start();
//        t1.join();
//
//        System.out.println("sum = " +sum);

        //这样虽然能解决问题，但是并不好看和优雅
        Callable<Integer> callable = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
             int result = 0;
                for (int i = 0; i < 1000; i++) {
                    result += i;
                }
                return result;//这种情况下不需要引入一个新的成员变量
            }
        };
        //此时的callable还未执行完毕，如果直接获取就会发生错误，所以需要一个类来接受最终执行的结果。
        FutureTask<Integer> futureTask = new FutureTask<>(callable);
        Thread t = new Thread(futureTask);
        t.start();
        System.out.println(futureTask.get());
    }
}
